/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bs.stock.dao;

import bs.global.dao.BaseDAO;
import bs.stock.modelo.Producto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author lloubiere
 */
@Stateless
public class ProductoDAO extends BaseDAO implements Serializable{
    
    public Producto getProducto(String id) {
        return getObjeto(Producto.class, id);
    }

    public Producto getProducto(Producto p){

        return getProducto(p.getCodigo());
    }

    public List<Producto> getLista() {
        return getLista(Producto.class, true, -1, -1);
    }

    public List<Producto> getLista(int maxResults, int firstResult) {
        return getLista(Producto.class, false, maxResults, firstResult);
    }   
     
    public List<Producto> getProductoByBusqueda(String txtBusqueda, boolean mostrarDebaja, int cantMax){
        
        try {
            
            String sQuery = "SELECT e FROM Producto e "
                    + " WHERE (e.codigo LIKE :codigo OR e.descripcion LIKE :descripcion) "
                    + (mostrarDebaja ? " ": " AND e.auditoria.debaja = 'N' ")
                    + " ORDER BY e.codigo";
            
            Query q = em.createQuery(sQuery);            
            q.setParameter("codigo", "%"+txtBusqueda.replaceAll(" ", "%")+"%");
            q.setParameter("descripcion", "%"+txtBusqueda.replaceAll(" ", "%")+"%");
            
            if(cantMax>0){
                q.setMaxResults(cantMax);
            }
            
            return q.getResultList();            
            
        } catch (Exception e) {
            log.log(Level.SEVERE, "getProductoByBusqueda", e);
            return new ArrayList<Producto>();
        }        
    }
    
    public List<Producto> getProductoByBusqueda(Map<String, String> filtro, String txtBusqueda, boolean mostrarDebaja, int cantMax){
        
        try {
            
            String sQuery = "SELECT e FROM Producto e "
                    + " WHERE (e.codigo LIKE :codigo OR e.descripcion LIKE :descripcion) "
                    + (mostrarDebaja ? " ": " AND e.auditoria.debaja = 'N' ")
                    + generarStringFiltro(filtro,"e", false)
                    + " ORDER BY e.codigo ";
            
            Query q = em.createQuery(sQuery);            
            q.setParameter("codigo", "%"+txtBusqueda.replaceAll(" ", "%")+"%");
            q.setParameter("descripcion", "%"+txtBusqueda.replaceAll(" ", "%")+"%");
            
            if(cantMax>0){
                q.setMaxResults(cantMax);
            }            
            
            return q.getResultList();            
            
        } catch (Exception e) {
            log.log(Level.SEVERE, "getProductoByBusqueda", e);
            return new ArrayList<Producto>();
        }        
    }

}
